package suanfa

import "fmt"

type CheckListNode struct {
	List           []int // 校验数组
	Ok             bool  // 是否有规律
	Val            int
	ChaOk          bool           // 是否有规律
	ChaVal         int            // 公差/等比
	ShangOk        bool           // 是否有规律
	ShangVal       int            // 公差/等比
	Shang2Ok       bool           // 是否有规律
	Shang2Val      int            // 公差/等比
	ChaListNode    *CheckListNode // 当不具备等差时的新数组节点
	ShangListNode  *CheckListNode // 当不具备等比时的新数组节点
	Shang2ListNode *CheckListNode // 当不具备开方时的新数组节点
}

func CheckListTree(node *CheckListNode, result int) (*CheckListNode, int,bool) {
	var val int
	var ok bool
	var list []int
	if node.Ok == true || len(node.List) <= 2 {
		return nil, result,ok
	}

	val, list, ok = GetCha(node.List)
	node.ChaOk = ok
	node.ChaVal = val
	node.ChaListNode = &CheckListNode{
		List: list,
	}
	fmt.Println(node.List,result,node.ChaOk,node.ChaVal)
	if node.ChaOk == true {
		node.Ok = true
		//node.Val = node.List[len(node.List)-1] + val
		return node, result + node.List[len(node.List)-1] + val,ok
	} else {
		val, list, ok = GetShang(node.List)
		node.ShangOk = ok
		node.ShangVal = val
		node.ShangListNode = &CheckListNode{
			List: list,
		}
		if node.ShangOk == true {
			node.Ok = true
			//fmt.Println(result,node.List,val)
			//node.Val = node.List[len(node.List)-1] * val
			return node, result + node.List[len(node.List)-1]*val,ok
		}
	}

	node.ChaListNode, result,ok = CheckListTree(node.ChaListNode, result)
	result = node.List[len(node.List)-1] + result
	if ok!=true{
		node.ShangListNode, result,ok = CheckListTree(node.ShangListNode, result)
		fmt.Println("---",node.List[len(node.List)-1],result)
		result = node.List[len(node.List)-1] + result
		//fmt.Println(result)
	}


	return node, result,ok

}
